require "Token"
require "Lexer"
require "Parser.tab"
require "sym"
require "SymTable"
require 'rdoc/rdoc'

#Main
#file: Archivo que recibe de entrada el programa
=begin
def main (file)
  if file != nil then
     abrir(file)
  else
#obtenemos el nombre introducido por el usuario      
      puts "Introduzca el nombre del archivo:"  
      file = gets.chomp
      abrir(file)
  end
end
=end

#Metodo Abrir: abre el archivo para ser parseado
def abrir(f)
  begin
    stack = []

    parser = Parser.new(f)
    # FALTA MODIFICAR PARSER PARA QUE ACEPTE:
    # parser = Parser.new(0,file)
    parser.parse()

    #excepciones. Con retry, iniciamos el bloque begin de nuevo.
    rescue SystemCallError
     puts "El archivo no existe, por favor provea un archivo valido"
    rescue StandardError => e
     puts e.message
     retry
    rescue RegexpError => r
     puts r.message
    retry
   end
end

# --- INICIO DEL MAIN --- #

puts ""
a = ARGV[0]

if ARGV.length == 1 && a[-4..-1]==".vec" then
  
  f = open(ARGV[0], "r")
  lexy = Lexer.new(f,0)

  #falta implementar que si hay error solo muestre el primer error!

  while (tk=lexy.yylex()) != nil
    puts tk
  end
  
  abrir (f)
  
elsif ARGV.length == 2 && ARGV[0] == "-e" then

  a = ARGV[1] + "\n"
  lexy = Lexer.new(a,1)
  while (tk=lexy.yylex()) != nil
    puts tk
  end

  # FALTA MODIFICAR PARSER PARA QUE ACEPTE:
  #parser = Parser.new(1,a)
  #parser.parse()

else
  puts "\tError en los argumentos pasados!"
  puts "\tOpciones disponibles:"
  puts "\t\tvecti -e \"<codigo>\""
  puts "\t\tvecti <nombre_archivo>.vec"
end
puts ""

# main(ARGV[0])
